/**
 * PLM项目服务
 * 提供项目相关的服务功能
 */

// 引入项目表单配置
const ProjectFormConfig = require('../comm/biz/project_form_config.js');
// 引入辅助工具
const { dataHelper, timeHelper } = require('../config/project_helpers_config');

// 项目状态常量
const PROJECT_STATUS = {
  DRAFT: 0,        // 草稿
  PENDING: 1,      // 待立项
  APPROVED: 2,     // 已立项
  DESIGNING: 3,    // 设计中
  DEVELOPING: 4,   // 开发中
  TESTING: 5,      // 测试中
  COMPLETED: 6,    // 已完成
  CANCELED: 99     // 已取消
};

// 项目优先级
const PRIORITY = {
  LOW: 'low',        // 低
  NORMAL: 'normal',  // 中
  HIGH: 'high',      // 高
  URGENT: 'urgent'   // 紧急
};

// 项目服务
const projectService = {
  /**
   * 获取项目列表
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 项目列表
   */
  getProjectList: async function(params = {}) {
    console.log('调用projectService.getProjectList', params);
    
    // 返回模拟数据
    return {
      code: 0,
      data: {
        list: [
          {
            _id: 'proj001',
            name: '产品A开发项目',
            model: '产品A',
            cate: '霍尔',
            status: PROJECT_STATUS.DEVELOPING,
            progress: 60,
            devManager: '张三',
            bizManager: '李四',
            priority: PRIORITY.HIGH,
            createTime: Date.now() - 86400000 * 30,
            updateTime: Date.now() - 86400000 * 2
          },
          {
            _id: 'proj002',
            name: '产品B升级项目',
            model: '产品B',
            cate: '磁编',
            status: PROJECT_STATUS.DESIGNING,
            progress: 30,
            devManager: '王五',
            bizManager: '赵六',
            priority: PRIORITY.NORMAL,
            createTime: Date.now() - 86400000 * 15,
            updateTime: Date.now() - 86400000 * 5
          }
        ],
        total: 2
      }
    };
  },
  
  /**
   * 获取项目详情
   * @param {string} id 项目ID
   * @returns {Promise<Object>} 项目详情
   */
  getProjectDetail: async function(id) {
    console.log('调用projectService.getProjectDetail', id);
    
    // 返回模拟数据
    return {
      code: 0,
      data: {
        _id: id,
        name: '模拟项目' + id,
        model: '模拟产品',
        cate: '霍尔',
        status: PROJECT_STATUS.DEVELOPING,
        progress: 55,
        devManager: '张三',
        bizManager: '李四',
        team: ['张三', '李四', '王五', '赵六'],
        priority: PRIORITY.HIGH,
        createTime: Date.now() - 86400000 * 20,
        updateTime: Date.now() - 86400000 * 1,
        description: '这是一个模拟项目，用于测试',
        milestones: [
          { name: '需求分析', deadline: Date.now() - 86400000 * 15, completed: true },
          { name: '概要设计', deadline: Date.now() - 86400000 * 10, completed: true },
          { name: '详细设计', deadline: Date.now() - 86400000 * 5, completed: true },
          { name: '编码实现', deadline: Date.now() + 86400000 * 10, completed: false },
          { name: '测试验证', deadline: Date.now() + 86400000 * 20, completed: false },
          { name: '发布上线', deadline: Date.now() + 86400000 * 30, completed: false }
        ],
        attachments: [
          { name: '需求文档.docx', url: 'https://example.com/docs/req.docx', size: 1024 * 50 },
          { name: '设计文档.pdf', url: 'https://example.com/docs/design.pdf', size: 1024 * 100 }
        ]
      }
    };
  },
  
  /**
   * 创建项目
   * @param {Object} data 项目数据
   * @returns {Promise<Object>} 创建结果
   */
  createProject: async function(data) {
    console.log('调用projectService.createProject', data);
    
    // 返回模拟数据
    return {
      code: 0,
      data: {
        _id: 'proj' + Date.now().toString().substring(8),
        message: '项目创建成功'
      }
    };
  },
  
  /**
   * 更新项目
   * @param {string} id 项目ID
   * @param {Object} data 项目数据
   * @returns {Promise<Object>} 更新结果
   */
  updateProject: async function(id, data) {
    console.log('调用projectService.updateProject', { id, data });
    
    // 返回模拟数据
    return {
      code: 0,
      data: {
        message: '项目更新成功'
      }
    };
  },
  
  /**
   * 项目状态格式化
   * @param {number} status 状态码
   * @returns {string} 状态文本
   */
  getStatusText: function(status) {
    const statusMap = {
      [PROJECT_STATUS.DRAFT]: '草稿',
      [PROJECT_STATUS.PENDING]: '待立项',
      [PROJECT_STATUS.APPROVED]: '已立项',
      [PROJECT_STATUS.DESIGNING]: '设计中',
      [PROJECT_STATUS.DEVELOPING]: '开发中',
      [PROJECT_STATUS.TESTING]: '测试中',
      [PROJECT_STATUS.COMPLETED]: '已完成',
      [PROJECT_STATUS.CANCELED]: '已取消'
    };
    
    return statusMap[status] || '未知状态';
  },
  
  /**
   * 项目优先级格式化
   * @param {string} priority 优先级
   * @returns {string} 优先级文本
   */
  getPriorityText: function(priority) {
    const priorityMap = {
      [PRIORITY.LOW]: '低',
      [PRIORITY.NORMAL]: '中',
      [PRIORITY.HIGH]: '高',
      [PRIORITY.URGENT]: '紧急'
    };
    
    return priorityMap[priority] || '未知';
  },
  
  /**
   * 项目优先级标识格式化
   * @param {string} priority 优先级
   * @returns {string} 优先级CSS类名
   */
  getPriorityClass: function(priority) {
    const classMap = {
      [PRIORITY.LOW]: 'priority-low',
      [PRIORITY.NORMAL]: 'priority-normal',
      [PRIORITY.HIGH]: 'priority-high',
      [PRIORITY.URGENT]: 'priority-urgent'
    };
    
    return classMap[priority] || 'priority-normal';
  },
  
  /**
   * 根据项目类型获取表单配置
   * @param {string} type 项目类型
   * @returns {Object} 表单配置
   */
  getProjectFormConfig: function(type) {
    // 使用project_form_config.js中的配置
    return ProjectFormConfig.getFormConfigByType(type);
  },
  
  /**
   * 获取状态颜色
   * @param {string} status 状态值
   * @returns {string} 颜色代码
   */
  getStatusColor: function(status) {
    const statusColorMap = {
      0: '#888888', // 草稿
      1: '#1890ff', // 待立项
      2: '#52c41a', // 已立项
      3: '#722ed1', // 设计中
      4: '#fa8c16', // 开发中
      5: '#eb2f96', // 测试中
      6: '#52c41a', // 已完成
      99: '#f5222d' // 已取消
    };
    
    return statusColorMap[status] || '#888888';
  },
  
  /**
   * 获取状态背景色
   * @param {string} status 状态值
   * @returns {string} 背景色代码
   */
  getStatusBgColor: function(status) {
    const statusBgColorMap = {
      0: '#f0f0f0', // 草稿
      1: '#e6f7ff', // 待立项
      2: '#f6ffed', // 已立项
      3: '#f9f0ff', // 设计中
      4: '#fff7e6', // 开发中
      5: '#fff0f6', // 测试中
      6: '#f6ffed', // 已完成
      99: '#fff1f0' // 已取消
    };
    
    return statusBgColorMap[status] || '#f0f0f0';
  },
  
  /**
   * 验证项目数据的保护子参数是否完整
   * @param {Object} data 项目数据
   * @returns {Object} 验证后的数据
   */
  validateProtectionParams: function(data) {
    if (!data) return data;
    
    // 堵转保护子参数
    if (data.stallProtection === '有，自恢复' || data.stallProtection === '有，手动重开') {
      if (!data.stallHoldTime) data.stallHoldTime = '1';
      
      if (data.stallProtection === '有，自恢复') {
        if (!data.stallRestartTime) data.stallRestartTime = '1';
        if (!data.stallRestartCount) data.stallRestartCount = '1';
      }
    }
    
    // 过压保护子参数
    if (data.overvoltageProtection && data.overvoltageProtection !== '无') {
      if (!data.overvoltageValue) data.overvoltageValue = '15';
      
      if (data.overvoltageProtection === '有，自恢复') {
        if (!data.overvoltageRecoveryValue) data.overvoltageRecoveryValue = '14';
      }
    }
    
    // 欠压保护子参数
    if (data.undervoltageProtection && data.undervoltageProtection !== '无') {
      if (!data.undervoltageValue) data.undervoltageValue = '6';
      
      if (data.undervoltageProtection === '有，自恢复') {
        if (!data.undervoltageRecoveryValue) data.undervoltageRecoveryValue = '6.5';
      }
    }
    
    // 温度保护子参数
    if (data.temperatureProtection && data.temperatureProtection !== '无') {
      if (!data.protectionTemp) data.protectionTemp = '90';
      
      if (data.temperatureProtection === '有，自恢复') {
        if (!data.recoveryTemp) data.recoveryTemp = '80';
      }
    }
    
    // 过流保护子参数
    if (data.overcurrentProtection && data.overcurrentProtection !== '无') {
      if (!data.overcurrentValue) data.overcurrentValue = '30';
    }
    
    // 电流限制保护子参数
    if (data.currentLimitProtection === '有') {
      if (!data.currentLimitValue) data.currentLimitValue = '12';
    }
    
    // 堵塞保护子参数
    if (data.blockageProtection && data.blockageProtection !== '无') {
      if (!data.blockageDiameter) data.blockageDiameter = '3';
      if (!data.blockageHoldTime) data.blockageHoldTime = '5';
    }
    
    // 缺相保护子参数
    if (data.phaseProtection && data.phaseProtection !== '无') {
      if (!data.phaseProtectionValue) data.phaseProtectionValue = '2'; // 缺相检测时间
    }
    
    return data;
  }
};

// 导出项目服务常量和方法
module.exports = {
  ...projectService,
  PROJECT_STATUS,
  PRIORITY
}; 